home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / opth / opth40.lzh / OpTh.s < prev    next >
Text File  |  1997-08-24  |  7KB  |  332 lines

  1. **********************************************************
  2. **                            **
  3. **    Optical Through Tool for MercuryUnit ver0.40    **
  4. **                            **
  5. **                Programed by ふなぽん    **
  6. **                            **
  7. **********************************************************
  8.  
  9.     .include    doscall.mac
  10.     .include    iocscall.mac
  11.     .include    const.h
  12.  
  13.     .cpu    68000
  14.  
  15.  
  16.         .text
  17.         .even
  18.  
  19.     lea.l    MYSP(pc),sp        *スタックポイントを指定のアドレスへ
  20.  
  21.     pea.l    MAIN_MES(pc)
  22.     DOS    _PRINT
  23.     addq.l    #4,sp
  24.  
  25. **********************************************************
  26. **        Comand Line Option Check        **
  27. **********************************************************
  28.  
  29.     moveq.l    #0,d6            *何も実行して無い用フラグ
  30.  
  31. C_CHECK:
  32.     addq.l    #1,a2
  33.     bsr    SKIPSP            *スペースをスキップ
  34.     tst.b    (a2)            *引数があるか?
  35.     beq    STEREO_OPTICAL_OUT
  36.  
  37.     cmpi.b    #'-',(a2)
  38.     beq    OP_CHECK
  39.     cmpi.b    #'/',(a2)
  40.     beq    OP_CHECK
  41.     bra    HELP
  42.  
  43. OP_CHECK:
  44.     addq.l    #1,a2            *"/"や"-"の分a2を進めておく
  45.     move.b    (a2)+,d0        *一文字取り出す
  46.     bsr    TOUPPER            *大文字に変換しておく
  47.     cmpi.b    #"C",d0
  48.     beq    OPTICAL_CHECK
  49.     cmpi.b    #"S",d0
  50.     beq    OPTICAL_STOP
  51.     cmpi.b    #"M",d0
  52.     beq    STEREO_OPTICAL_OUT
  53.     cmpi.b    #"R",d0
  54.     beq    RIGHT_OPTICAL_OUT
  55.     cmpi.b    #"L",d0
  56.     beq    LEFT_OPTICAL_OUT
  57.  
  58.     cmpi.b    #"A",d0
  59.     beq    ADPCM_THROUGH
  60.  
  61.     tst.b    (a2)
  62.     beq    END_1
  63.  
  64.     bra    HELP
  65.  
  66. C_C_CHECK:                *OPTIONが複数の時用
  67.     bsr    SKIPSP            *スペースをスキップ
  68.     tst.b    (a2)            *引数があるか?
  69.     beq    END            *
  70.     cmpi.b    #'-',(a2)
  71.     beq    OP_CHECK
  72.     cmpi.b    #'/',(a2)
  73.     beq    OP_CHECK
  74.     bra    END
  75.  
  76. SKIPSP0:    addq.l    #01,a2
  77.  
  78. SKIPSP:
  79.     cmpi.b    #SPACE,(a2)
  80.     beq    SKIPSP0
  81.     cmpi.b    #TAB,(a2)        *SPACE&TABは飛ばす
  82.     beq    SKIPSP0
  83.     rts
  84.  
  85. TOUPPER:
  86.     cmpi.b    #"a",d0            *小文字なら大文字に
  87.     bcs    TOUPPER0
  88.     cmpi.b    #"z"+1,d0
  89.     bcc    TOUPPER0
  90.     subi.b    #$20,d0
  91. TOUPPER0:
  92.     rts
  93.  
  94. **********************************************************
  95. **        Mercury-Unit Check            **
  96. **********************************************************
  97.  
  98. UNIT_CHECK:
  99.     move.w    #2,-(sp)                    *サイズ
  100.     move.l    #$00E0_0000,-(sp)        *TEXT VRAM    書き込み
  101.     move.l    #$00EC_C100,-(sp)        *Xellent    読み込み
  102.     DOS    _BUS_ERR            *$fff7
  103.     lea    10(sp),sp
  104.     tst.l    d0
  105.     beq    NOTUNIT            *Xellent030
  106.                     *バスエラったらXellent無しなので以下OK
  107.                     *バスエラなかったらダメ
  108. NO_Xellent:
  109.     move.w    #2,-(sp)
  110.     move.l    #$00EC_C080,-(sp)
  111.     move.l    #$00EC_C080,-(sp)
  112.     DOS    _BUS_ERR
  113.     lea.l    10(sp),sp
  114.     tst.l    d0
  115.     bne    NOTUNIT                *何も無し
  116.  
  117.     rts
  118.  
  119. **********************************************************
  120. **        Optical in Through            **
  121. **********************************************************
  122.  
  123. OPTICAL_CHECK:
  124.     bsr    UNIT_CHECK
  125.  
  126.         clr.l    -(sp)
  127.         DOS    _SUPER            * スーパーバイザモードへ
  128.         move.l    d0,SSP_SAVE        * ssp待避
  129.         addq.l    #4,sp
  130.  
  131.     moveq.l    #6,d0        *6*1/60
  132. W_V0:
  133.     btst.b    #4,$E88001
  134.     beq    W_V0        *帰って来ない
  135. W_V1:
  136.     btst.b    #4,$E88001
  137.     bne    W_V1        *帰って来た
  138.     dbra    d0,W_V0
  139.  
  140.         move.l    SSP_SAVE(pc),-(sp)    *
  141.         DOS    _SUPER            * ユーザーモードへ
  142.         addq.l    #4,sp            *
  143.  
  144.     btst.b    #0,$ECC0A1
  145.     bne    OPTICAL_STOP
  146.  
  147. STEREO_OPTICAL_OUT:
  148.     bsr    UNIT_CHECK
  149.  
  150.     moveq.l    #0,d0
  151.     move.b    $ECC0A1,D0
  152.     andi.b    #%0100_0000,d0
  153.     or.b    #%0000_1110,d0
  154.     move.b    d0,$ecc091
  155.  
  156.     pea.l    OPTICAL_OUT_STEREO_MES(pc)
  157.     bra    @F
  158.  
  159. RIGHT_OPTICAL_OUT:
  160.     bsr    UNIT_CHECK
  161.  
  162.     moveq.l    #0,d0
  163.     move.b    $ECC0A1,d0
  164.     andi.b    #%0100_0000,d0
  165.     or.b    #%0000_1010,d0
  166.     move.b    d0,$ECC091
  167.  
  168.     pea.l    OPTICAL_OUT_RIGHT_MES(pc)
  169.     bra    @F
  170.  
  171. LEFT_OPTICAL_OUT:
  172.     bsr    UNIT_CHECK
  173.  
  174.     moveq.l    #0,d0
  175.     move.b    $ECC0A1,d0
  176.     andi.b    #%0100_0000,d0
  177.     or.b    #%0000_0110,d0
  178.     move.b    d0,$ECC091
  179.  
  180.     pea.l    OPTICAL_OUT_LEFT_MES(pc)
  181. @@:
  182.     DOS    _PRINT
  183.     addq.l    #4,sp
  184.  
  185.     bra    C_C_CHECK
  186.  
  187. **********************************************************
  188. **        Stop Optical in Through            **
  189. **********************************************************
  190.  
  191. OPTICAL_STOP:
  192.     bsr    UNIT_CHECK
  193.  
  194.     moveq.l    #0,d0
  195.     move.b    $ECC0A1,d0
  196.     or.b    #%0000_0001,d0
  197.     move.b    d0,$ECC091
  198.  
  199.     pea.l    OPTICAL_STOP_MES(pc)
  200.     DOS    _PRINT
  201.     addq.l    #4,sp
  202.  
  203.     bra    C_C_CHECK
  204.  
  205. **********************************************************
  206. **            ADPCM Through            **
  207. **********************************************************
  208.  
  209. ADPCM_THROUGH:
  210.     move.b    (a2)+,d0    *一文字取り出す
  211.     bsr    TOUPPER        *大文字に変換しておく
  212.     cmpi.b    #"M",d0        *出力左右
  213.     beq    ADPCM_MIDDLE_OUT
  214.     cmpi.b    #"L",d0        *左
  215.     beq    ADPCM_LEFT_OUT
  216.     cmpi.b    #"R",d0        *右
  217.     beq    ADPCM_RIGHT_OUT
  218.     cmpi.b    #"S",d0        *停止
  219.     beq    ADPCM_OUT_STOP
  220.  
  221. **********************************************************
  222. **            ADPCM出力            **
  223. **********************************************************
  224.  
  225. ADPCM_MIDDLE_OUT:
  226.     move.w    #$0403,d1
  227.     move.l    #$00ff,d2
  228.     lea.l    PCM_BUF(pc),a1
  229.     IOCS    _ADPCMINP
  230.     pea.l    ADPCM_MIDDLE_OUT_MES(pc)
  231.     bra    @F
  232.  
  233. ADPCM_OUT_STOP:
  234.     moveq.l    #00,d1
  235.     move.l    #$00ff,d2
  236.     lea.l    PCM_BUF(pc),a1
  237.     IOCS    _ADPCMINP
  238.     pea.l    ADPCM_OUT_STOP_MES(pc)
  239.     bra    @F
  240.  
  241. ADPCM_LEFT_OUT:
  242.     move.w    #$0401,d1
  243.     move.l    #$00ff,d2
  244.     lea.l    PCM_BUF(pc),a1
  245.     IOCS    _ADPCMINP
  246.     pea.l    ADPCM_LEFT_OUT_MES(pc)
  247.     bra    @F
  248.  
  249. ADPCM_RIGHT_OUT:
  250.     move.w    #$0402,d1
  251.     move.l    #$00ff,d2
  252.     lea.l    PCM_BUF(pc),a1
  253.     IOCS    _ADPCMINP
  254.     pea.l    ADPCM_RIGHT_OUT_MES(pc)
  255.  
  256. @@:
  257.     DOS    _PRINT
  258.     addq.l    #4,sp
  259.  
  260.     bra    C_C_CHECK
  261.  
  262. **********************************************************
  263. **            TEXT 出力            **
  264. **********************************************************
  265.  
  266. HELP:
  267.     pea.l    HELP_MES(pc)
  268.     DOS    _PRINT
  269.     addq.l    #4,sp
  270.     bra    END
  271.  
  272. NOTUNIT:
  273.     pea.l    NOTUNIT_MES(pc)
  274.     DOS    _PRINT
  275.     addq.l    #4,sp
  276.  
  277. END_1
  278.     tst.l    d6
  279.     beq    HELP
  280.  
  281. END:
  282.     DOS    _EXIT
  283.  
  284. **********************************************************
  285. **            TEXT                **
  286. **********************************************************
  287.  
  288.     .data
  289.     .even
  290.  
  291. MAIN_MES:
  292.     .dc.b    ' Through the Optical In of Mercury-Unit ver0.40',CR,LF
  293.     .dc.b    '         Programed by ふなぽん 1 August 1997',CR,LF,LF,0   
  294.  
  295. OPTICAL_OUT_STEREO_MES:    .dc.b    'Optical Through [Stereo]',CR,LF,0
  296. OPTICAL_OUT_RIGHT_MES:    .dc.b    'Optical Through [Right]',CR,LF,0
  297. OPTICAL_OUT_LEFT_MES:    .dc.b    'Optical Through [Left]',CR,LF,0
  298. OPTICAL_STOP_MES:    .dc.b    'STOP Optical Through',CR,LF,0
  299. NOTUNIT_MES:        .dc.b    'Mercury-Unit is not inserted this X680x0.',CR,LF,0
  300.  
  301. ADPCM_MIDDLE_OUT_MES:    .dc.b    'AUDIO IN Through [Middle]',CR,LF,0
  302. ADPCM_RIGHT_OUT_MES:    .dc.b    'AUDIO IN Through [Right]',CR,LF,0
  303. ADPCM_LEFT_OUT_MES:    .dc.b    'AUDIO IN Through [Left]',CR,LF,0
  304. ADPCM_OUT_STOP_MES:    .dc.b    'STOP AUDIO IN Through',CR,LF,0
  305.  
  306. HELP_MES
  307.     .dc.b    '-M    Through the Optical IN (STEREO) of Mercury-Unit',CR,LF
  308.     .dc.b    '-R    Through the Optical IN (RIGHT)  of Mercury-Unit',CR,LF
  309.     .dc.b    '-L    Through the Optical IN (LEFT)   of Mercury-Unit',CR,LF
  310.     .dc.b    '-S    Stop  the Through of Optical IN of Mercury-Unit',CR,LF
  311.     .dc.b    '-C    Check the Through of Optical IN of Mercury-Unit',CR,LF
  312.     .dc.b    CR,LF
  313.     .dc.b    '-A  or -AM  Through the AUDIO IN (MIDDLE) of X680x0',CR,LF
  314.     .dc.b    '-AR         Through the AUDIO IN (RIGHT)  of X680x0',CR,LF
  315.     .dc.b    '-AL         Through the AUDIO IN (LEFT)   of X680x0',CR,LF
  316.     .dc.b    '-AS         STOP    the AUDIO IN          of X680x0',CR,LF,0
  317.  
  318.     .bss
  319.     .even
  320.  
  321. SSP_SAVE:    .ds.l    1
  322. PCM_BUF:    .ds.b    256
  323.  
  324.     .stack
  325.     .even
  326.  
  327. MYSTACK:
  328.     .ds.l    256        *スタック領域
  329. MYSP:
  330.  
  331.     .end
  332.